#include "ex16_49.h"
#include <iostream>
#include <list>
#include <string>
#include <vector>
using namespace std;

//所有模版的声明都需要在函数定义前声明
template <typename T>
void f(T t);
template <typename T>
void g(T* t);
template <typename T>
void g(T t);
template <typename T>
void f(const T* t);

int main(int argc, char** argv) {
  int i = 42, *p = &i;
  const int ci = 0, *p2 = &ci;

  g(42);  //调用g(T t)
  g(p);   //调用g(T *t)
  g(ci);  //调用g(T t)
  g(p2);  //调用g(T *t)
  f(42);  //调用f(T t)
  f(p);   //调用f(T t)
  f(ci);  //调用f(T t)
  f(p2);  //调用f(const T *t)
  cin.get();
  return 0;
}